//2: 本地存储
//和SharedPreferences操作一样，Flutter内部并没有提供对本地文件的支持，但是官方给我们提供了第三方的支持库
//同样的方法，我们需要在pubspec.yaml文件中引入
//path_provider: ^0.4.0

//在path_provider中有三个获取文件路径的方法：
//
//getTemporaryDirectory()//获取应用缓存目录，等同IOS的NSTemporaryDirectory()和Android的getCacheDir() 方法
//getApplicationDocumentsDirectory()获取应用文件目录类似于Ios的NSDocumentDirectory和Android上的 AppData目录
//getExternalStorageDirectory()//这个是存储卡，仅仅在Android平台可以使用
import 'dart:async';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter_practice/utils/Utils.dart';
import 'package:path_provider/path_provider.dart';

// ignore: must_be_immutable
class MyLocalDemo extends StatelessWidget {
  var _controller = new TextEditingController();

  @override
  Widget build(BuildContext context) {
    // TODO: implement build

    return Scaffold(
      appBar: Utils.getAppBar('文件存储'),
      body: Center(
        child: Column(
          children: <Widget>[
            TextField(
              decoration: InputDecoration(
                contentPadding: EdgeInsets.all(10.0),
                icon: Icon(Icons.done_all),
                labelText: '请填写文本',
              ),
              controller: _controller,
            ),
            RaisedButton(
              onPressed: () {
                save(_controller.value.text.toString());
                print('保存成功');
              },
              child: Text('保存'),
              color: Colors.red,
            ),
            RaisedButton(
              onPressed: () {
                Future<String> user = get();
                user.then((String name) {
                  print(name);
                });
              },
              child: Text('获取'),
              color: Colors.blue,
            ),
          ],
        ),
      ),
    );
  }

  //获取文件路径
  Future<String> get _localPath async {
    final directory = await getApplicationDocumentsDirectory();
    return directory.path;
  }

  //创建本地文件
  Future<File> get _localFile async {
    final path = await _localPath;
    return new File('$path/nameFile.txt');
  }

  //保存
  Future<File> save(String name) async {
    final file = await _localFile;
    return file.writeAsString(name);
  }

  //获取
  Future<String> get() async {
    final file = await _localFile;
    return file.readAsString();
  }
}

//3; 数据库操作
//同样的方法，我们需要在pubspec.yaml文件中引入
//
//sqflite: >=0.8.5